Skip to content

Combine之基本的订阅者和发布者

Combine是Apple退出的的异步处理框架。

常见的编程范式

  • 命令式编程
  • 函数式编程
    • 特点:函数执行结果仅仅取决于函数参数。相比命令编程,少了许多参数声明
  • 面相对象编程
  • 声明式编程
    • 特点: 以声明的形式表达程序的执行逻辑。常见的有sql、html、swiftui、Combine等

发布者订阅者模式

  • publisher 发布者 -> up主
  • subscriber 订阅者 -> 粉丝
  • subscription 订阅 -> 点击关注
  • dispatch center 调度中心 ->视频平台 -> Combine
  • emit data 发布数据 -> 发布视频通知订阅者
  • operator -> 视频剪辑

Combine编程需要理解思考的问题:

  • 什么时间发送数据
  • 发送数据类型
  • 发送次数
  • 可以发送错误数据吗
  • 如何中途停止发送
  • 有多少种发布者

基本的发布者和订阅者

Publisher:

  • Just(value) :
    • 发布一次数据, 并立即结束
  • Future(closure):
    • 初始化发布者,执行异步操作。当操作完成后,向订阅者发布数据。 clousre必须有参数,来告知是否操作成功
    • 发送一次就结束
  • Subject(协议): 可以调用send方法发送多次
    • PassthroughSubject 可以发送来自send方法和其他发布者的数据
    • CurrentValueSubject(value) 可以保存和发布最后的数据(自send方法和其他发布者),可设置默认数据

Subscriber

  • Sink(receivceCompletion:Closure, receiveValue:Closure)

    • receivceCompletion:完成数据发送时执行,内容可以是成功或失败
    • receiveValue: 数据过来后执行,参数将在回调中进一步加工
  • Assign(object:Reference, keypath:KeyPath)

    • 接收到的数据赋给对象的某个属性
  • 发布者和订阅者的数据类型必须一致,错误类型也需要一致

swift
// 可以看到 `Self.Failure == S.Failure, Self.Output == S.Input` 要求类型一致
public func subscribe<S>(_ subscriber: S) where S : Subscriber, Self.Failure == S.Failure, Self.Output == S.Input
// 可以看到 `Self.Failure == S.Failure, Self.Output == S.Input` 要求类型一致
public func subscribe<S>(_ subscriber: S) where S : Subscriber, Self.Failure == S.Failure, Self.Output == S.Input
  • Combine定义了一些扩展来中转发送数据,便于实现类型的一致

代码示例: [Combine之基本的订阅者和发布者代码示例]